"""
多态:
    提高程序的可扩展性和可维护性.
    *Python中的变量是没用类型区分的,所以py的多态与其他语言不同(或者说,不是严格意义上的多态)
    *简单的来说,多态就是"具有多种形态",就是说:即便不知道一个变量所引用的对象是什么类型,仍然可以通过这个变量调用方法,
    在运行过程中根据变量所引用的对象类型,动态决定调用哪个对象中的方法.
"""


class Animal:
    def eat(self):
        print("动物会吃")


class Cat(Animal):
    def eat(self):
        print("猫吃鱼...")


class Dog(Animal):
    def eat(self):
        print("狗吃骨头...")


class Man:
    def eat(self):
        print("人吃五谷杂粮...")


def food(obj):
    obj.eat()


#dog = Dog() 若不区分对象,可以直接用Dog()代表类Dog的对象
food(Dog())    # 狗吃骨头...
food(Cat())    # 猫吃鱼...
food(Man())    # 人吃五谷杂粮...

#Python是一中动态语言,在实现多态时,对继承的依赖性不强.
  #如上例,仅需要一个类外函数来调用各个类中的 同名函数(QwQ:圈个重点->同名)eat 就可以实现简单的多态.
#静态语言实现多态的三个必要条件
  #继承,方法重写,父类引用指向子类对象.
#动态语言的多态崇尚“鸭子类型"
  # 当看到一只鸟走起来像鸭子、游起来像鸭子、走起来也像鸭子，那么这只鸟就可以被称为鸭子。
  # 在鸭子类型中，不需要关心对象是什么类型，到底是不是鸭子，只关心对象的行为。